#作业
# 利用map批量检测用户名是否符合规范=> username符合规范, username不符合规范
# • 只能包含数据、字母、下划线，不以数字开头，长度在6-18之间
lst = ['wd&&&&*fr_eed','123sdeecswde','ede2','_efrfswde','edww23de']
def guifan(n):
    import re
    if (re.findall('^[a-zA-Z_]\w{5,17}\w$',n)) !=[]:
        return "{}符合规范".format(n)
    else:
        return "{}不符合规范".format(n)
b = map(guifan,lst)
print(list(b))

# filter把合法的用户名显示出来
# lst = ['wde234efr_eed','123sdeecswde','ede2','_efrfswde','edww23de']
# def hefa(n):
#     import re
#     if (re.findall('^[a-zA-Z_]\w{5,17}\w$',n)) !=[]:
#         return True
#     else:
#         return False
# b = filter(hefa,lst)
# print(list(b))

#匿名函数+reduce实现 1*2*3*...*n
# from functools import reduce
# lst = [1,2,3,4,5,6,7,8]
# c = reduce(lambda x,y:x*y ,lst)
# print(c)

# filter函数:找出[1-100]能被3整除的数
# def chu(n):
#     return n % 3 == 0
# print(list(filter(chu,range(1,101))))

# map函数:求list[1-10]各项的平方
# a = [1,2,3,4,5,6,7,8,9,10]
# def f(x):
#     return x**2
# print(list(map(f,a)))

# 将列表[1, 4, 5, 9]转换成'1459'的字符串
# from functools import reduce
# lst = [1,4,5,9]
# def f(x,y):
#     return x * 10 + y
# d = reduce(f,lst)
# print(str(d))

#将"123.456"转换成123.456
from functools import reduce
a = "123.456"
b = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}
n = a.index('.')
def func1(x):
    return b.get(x)
def func2(x,y):
    return x*10 + y
def flot(a):
    zheng = list(map(int,[x for x in a[:n]]))
    xiaoshu = list(map(int,[x for x in a[n+1:]]))
    return reduce(func2,zheng) + reduce(func2,xiaoshu) / 10 ** len(xiaoshu)
result = flot(a)
print(result)

# 有以下列表：list1=[7, -8, 5, 4, 0, -2, -5]
# 正数在前负数在后,整数从小到大,负数从大到小
# list1=[7, -8, 5, 4, 1, -2, -5]
# print(sorted(list1,key=lambda x:(x<0,abs(x))))


# 这是一个字符串排序，排序规则：小写<大写<奇数<偶数
# s = 'asdf234GDSdsf23' #排序:小写-大写-奇数-偶数
# 原理：先比较元组的第一个值，FALSE
# s = 'asdf234GDSdsf23'
# s2 = "".join(sorted(s, key=lambda x: (x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x)))
# print(s2)
# 原理：先比较元组的第一个值，如果相等就比较元组的下一个值，以此类推。
#   先看一下Boolean value 的排序：
#   print(sorted([True,Flase]))===>结果[False,True]
#   Boolean 的排序会将 False 排在前，True排在后 .
# 1.x.isdigit()的作用是把数字放在前边,字母放在后边.
# 2.x.isdigit() and int(x) % 2 == 0的作用是保证奇数在前，偶数在后。
# 3.x.isupper()的作用是在前面基础上,保证字母小写在前大写在后.
# 4.最后的x表示在前面基础上,对所有类别数字或字母排序。














